const Koa = require('koa');
const Router = require('koa-router');
const views = require('koa-views');
const bodyParser = require('koa-bodyparser');
const static = require('koa-static');
const render = require('koa-art-template');
const path = require('path');
const session = require('koa-session');
const DB = require('./module/db.js');


const app = new Koa();
const router = new Router();

//配置模板引擎中间件
/* app.use(views('./views',{
    extension: 'ejs'
})) */
//写一个中间件配置公共的信息
app.use(async (ctx, next) => {
    ctx.state.userinfo = 'zhangsan';
    await next();
})

//配置静态文件中间件
app.use(static(__dirname + '/static'))

//配置接收post bodyParser中间件
app.use(bodyParser());

//配置 koa-art-template 模板引擎
render(app, {
    root: path.join(__dirname, 'views'), //视图的位置
    extname: '.html', //后缀名
    debug: process.env.NODE_ENV !== 'production' //是否开启调试模式
})

//配置session中间件
app.keys = ['some secret hurr']; //cookie的签名
const CONFIG = {
    key: 'koa:sess', //cookie key (default is koa:sess)
    maxAge: 86400000, // cookie 的过期时间 maxAge in ms (default is 1 days)
    overwrite: true, //是否可以 overwrite (默认 default true)
    httpOnly: true, //cookie 是否只有服务器端可以访问 httpOnly or not (default true)
    signed: true, //签名默认 true
    rolling: true, //在每次请求时强行设置 cookie，这将重置 cookie 过期时间（默认：false）
    renew: false, //(boolean) renew session when session is nearly expired,
};
app.use(session(CONFIG, app));
// or if you prefer all default config, just use => app.use(session(app));


//中间件
app.use(async (ctx, next) => {
    console.log(new Date())
    await next();
    if (ctx.status == '404') { //错误处理          洋葱模型
        ctx.body = '这是404页面'
    } else {
        console.log(ctx.url)
    }
})

//配置路由
//ctx 上下文context， 包含了request 和 response 信息
router.get('/', async (ctx) => {
    let result = await DB.find('user', {})
    console.log(result)
    //ctx.body="首页"     //原生里面的res.writeHead（）      res.end（）
    ctx.session.userinfo = 'this is session'; //设置session
    ctx.cookies.set('userinfo', 'zhangsan', {
        maxAge: 1000 * 60 * 60
    })
    ctx.cookies.set('chinese', new Buffer('汉字').toString('base64'), { //cookie设置为汉字方法
        maxAge: 1000 * 60 * 60
    })
    await ctx.render("index", {
        title: 'hello ejs!'
    })
}).get('/news', async (ctx) => {
    console.log(ctx.session.userinfo) //获取session
    console.log(ctx.cookies.get('userinfo'))
    console.log(new Buffer(ctx.cookies.get('chinese'), 'base64').toString())
    ctx.body = '新闻页面'
}).get('/newscontent', async (ctx) => { //get传值
    console.log(ctx.query);
    ctx.body = '新闻详情'
}).get('/newslist/:aid', async (ctx) => { //动态路由
    console.log(ctx.params); //{ aid: '123' }
    ctx.body = '新闻详情'
}).get('/newslist2/:aid/:cid', async (ctx) => { //动态路由多个参数
    console.log(ctx.params); //{ aid: '123', cid: '456'}
    ctx.body = '新闻详情'
}).get('/add', async (ctx) => {
    let result = await DB.insert('user', {
        'username': 'zhaoxiaoliu',
        'age': 18,
        'sex': '女'
    })
    //console.log(result)
}).get('/edit', async (ctx) => {
    let data = await DB.update('user', {
        "username": "zhaoxiaoliu"
    }, {
        'username': 'zhaoxiaoliu222',
        'age': 28,
        'sex': '男'
    })
    //console.log(data)
}).get('/delete',async (ctx)=>{
    let data = await DB.remove('user',{'username':'zhaoxiaoliu222'});
    //console.log(data)
})

router.post('/doAdd', async (ctx) => {
    ctx.body = ctx.request.body;
})

//启动路由
app
    .use(router.routes()) //启动路由
    .use(router.allowedMethods());
/* 这是官方文档的推荐用法,我们可以
  看到 router.allowedMethods()用在了路由匹配 router.routes()之后,所以在当所有
  路由中间件最后调用.此时根据 ctx.status 设置 response 响应头 */

app.listen(3001)